d4db75c428c70eb840d5948a388e73d5942154b9,src/org/pentaho/di/trans/steps/update/Update.java,Update,processRow,#StepMetaInterface#StepDataInterface#,199

Before Change


            // lookup the values!
            if (log.isDetailed()) logDetailed(BaseMessages.getString(PKG, "Update.Log.CheckingRow")+getInputRowMeta().getString(r)); //$NON-NLS-1$
            
            data.keynrs  = new int[meta.getKeyStream().length];
            data.keynrs2 = new int[meta.getKeyStream().length];
            for (int i=0;i<meta.getKeyStream().length;i++)
            {
                data.keynrs[i]=getInputRowMeta().indexOfValue(meta.getKeyStream()[i]);
                if (data.keynrs[i]<0 &&  // couldn't find field!
                    !"IS NULL".equalsIgnoreCase(meta.getKeyCondition()[i]) &&   // No field needed! //$NON-NLS-1$
                    !"IS NOT NULL".equalsIgnoreCase(meta.getKeyCondition()[i])  // No field needed! //$NON-NLS-1$

After Change


            // lookup the values!
            if (log.isDetailed()) logDetailed(BaseMessages.getString(PKG, "Update.Log.CheckingRow")+getInputRowMeta().getString(r)); //$NON-NLS-1$
            
            ArrayList<Integer> keynrs = new ArrayList<Integer>(meta.getKeyStream().length);
            ArrayList<Integer> keynrs2 = new ArrayList<Integer>(meta.getKeyStream().length);
            
             
            for (int i=0;i<meta.getKeyStream().length;i++)
            {
                int keynr=getInputRowMeta().indexOfValue(meta.getKeyStream()[i]);
                
                if (keynr<0 &&  // couldn't find field!
                    !"IS NULL".equalsIgnoreCase(meta.getKeyCondition()[i]) &&   // No field needed! //$NON-NLS-1$
                    !"IS NOT NULL".equalsIgnoreCase(meta.getKeyCondition()[i])  // No field needed! //$NON-NLS-1$
                   )
                {
                    throw new KettleStepException(BaseMessages.getString(PKG, "Update.Exception.FieldRequired",meta.getKeyStream()[i])); //$NON-NLS-1$ //$NON-NLS-2$
                }
                keynrs.add(keynr);
                
                // this operator needs two bindings
                if ("= ~NULL".equalsIgnoreCase(meta.getKeyCondition()[i])){
                	keynrs.add(keynr);
                	keynrs2.add(-1);
                }
                
                int keynr2=getInputRowMeta().indexOfValue(meta.getKeyStream2()[i]);
                if (keynr2<0 &&  // couldn't find field!
                    "BETWEEN".equalsIgnoreCase(meta.getKeyCondition()[i])   // 2 fields needed! //$NON-NLS-1$
                   )
                {
                    throw new KettleStepException(BaseMessages.getString(PKG, "Update.Exception.FieldRequired",meta.getKeyStream2()[i])); //$NON-NLS-1$ //$NON-NLS-2$
                }
                keynrs2.add(keynr2);

                if (log.isDebug()) logDebug(BaseMessages.getString(PKG, "Update.Log.FieldHasDataNumbers",meta.getKeyStream()[i])+""+keynrs.get(keynrs.size()-1)); //$NON-NLS-1$ //$NON-NLS-2$
            }
            
            data.keynrs  = ArrayUtils.toPrimitive(keynrs.toArray(new Integer[0]));
            data.keynrs2 = ArrayUtils.toPrimitive(keynrs2.toArray(new Integer[0]));
            
            // Cache the position of the compare fields in Row row